package main

import "fmt"

func main() {
	/*
		switch语句:
			switch的写法：
				1.标准写法：
					switch 变量名 {
					case 数值1: 分支1
					case 数值2: 分支2
					case 数值3: 分支3
					...
					default:
						最后一个分支语句
					}

				2.省略 switch 后的变量，相当于直接作用在 true 上
				switch{ //true
				case true:
				case false:
				}

				3.case 后可以同时跟随多个数值
					switch 变量 {
					case 数值1,数值2,数值3：
					case 数值4,数值5：
					}

				4.switch 后可以多一条初始化语句
					switch 初始化语句;变量{
					}
				注意：此时，变量的作用范围只在 switch 里

		注意事项：
				1.switch 可以作用在其他数据类型上，case 后的数值必须与 switch 作用的变量类型一致
				2.case 语句是无序的，default 语句也可以放在任意位置
				3.case 后的数值是唯一的
				4.default 语句是可选择的操作
	*/
	//1.模拟计算器
	num1 := 0
	num2 := 0
	oper := ""
	fmt.Println("请输入一个整数：")
	fmt.Scanln(&num1)
	fmt.Println("请再次输入一个整数：")
	fmt.Scanln(&num2)
	fmt.Println("请输入一个操作：+，-，*，/")
	fmt.Scanln(&oper)

	switch oper {
	case "+":
		fmt.Printf("%d + %d = %d\n", num1, num2, num1+num2)
	case "-":
		fmt.Printf("%d - %d = %d\n", num1, num2, num1-num2)
	case "*":
		fmt.Printf("%d * %d = %d\n", num1, num2, num1*num2)
	case "/":
		fmt.Printf("%d / %d = %d\n", num1, num2, num1/num2)
	}

	//2.
	switch {
	case true:
		fmt.Println("true...")
	case false:
		fmt.Println("false...")
	}
	fmt.Println("main...over....")
	/*
		成绩：
		0-59：不及格
		60-69：及格
		70-79：中等
		80-89：良好
		90-100：优秀
	*/
	score := 89
	switch {
	case score >= 0 && score <= 59:
		fmt.Println("不及格")
	case score >= 60 && score <= 69:
		fmt.Println("及格")
	case score >= 70 && score <= 79:
		fmt.Println("中等")
	case score >= 80 && score <= 89:
		fmt.Println("良好")
	case score >= 90 && score <= 100:
		fmt.Println("优秀")
	default:
		fmt.Println("成绩有误")
	}

	//3.
	letter := "O"
	switch letter {
	case "A", "E", "I", "O", "U":
		fmt.Println(letter, "是元音。")
	case "M", "N":
		fmt.Println("M或N。")
	default:
		fmt.Println("其他。")
	}
	/*
		一个月的天数
	*/
	month := 2
	day := 0
	year := 2023
	switch month {
	case 1, 3, 5, 7, 8, 10, 12:
		day = 31
	case 4, 6, 9, 11:
		day = 30
	case 2:
		if year%400 == 0 || year%4 == 0 && year%100 != 0 {
			day = 29
		} else {
			day = 28
		}
	default:
		fmt.Println("月份有误")
	}
	fmt.Printf("%d 年 %d 月的天数是：%d\n", year, month, day)

	switch language := "golong"; language {
	case "golong":
		fmt.Println("Go语言")
	case "java":
		fmt.Println("Java语言")
	case "python":
		fmt.Println("Python语言")
	}
	//fmt.Println(language) // language的作用范围只在switch里
}
